import sys
import os
from pathlib import Path
from playwright.sync_api import Page, Locator

# 处理导入路径
if __name__ == "__main__":
    # 直接运行此文件时，添加项目根目录到路径
    project_root = str(Path(__file__).parent.parent)
    if project_root not in sys.path:
        sys.path.insert(0, project_root)

class BasePage:
    """
    所有页面对象的基类，封装了页面操作的常用方法。
    """

    def __init__(self, page: Page):
        """
        构造函数，初始化 Page 对象。

        :param page: Playwright 的 Page 对象。
        """
        self.page = page

    def navigate(self, url: str):
        """
        导航到指定的 URL。

        :param url: 目标 URL。
        """
        self.page.goto(url)

    def click(self, selector: str, **kwargs) -> None:
        """
        点击指定的元素。

        :param selector: CSS 选择器或 XPath。
        :param kwargs: 其他 Playwright 点击选项。
        """
        self.page.click(selector, **kwargs)

    def fill(self, selector: str, text: str, **kwargs) -> None:
        """
        向指定的输入框中填入文本。

        :param selector: CSS 选择器或 XPath。
        :param text: 要填入的文本。
        :param kwargs: 其他 Playwright 填充选项。
        """
        self.page.fill(selector, text, **kwargs)

    def find(self, selector: str) -> Locator:
        """
        查找指定的元素。

        :param selector: CSS 选择器或 XPath。
        :return: 返回一个 Locator 对象。
        """
        return self.page.locator(selector)

    def wait_for_selector(self, selector: str, **kwargs) -> None:
        """
        等待指定的元素出现。

        :param selector: CSS 选择器或 XPath。
        :param kwargs: 其他 Playwright 等待选项。
        """
        self.page.wait_for_selector(selector, **kwargs)